package com.ergwang.servicebase.exceptionhandler;


import com.ergwang.commonutils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


/**
 * @author ergwang
 * @date 2020-12-22 18:14
 */

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 全局异常处理
     * @param e Exception
     * @return R.error
     */
    // 指定出现异常的情况执行这个方法
    @ExceptionHandler(Exception.class)
    // 为了能够返回数据
    @ResponseBody
    public R error(Exception e){
        e.printStackTrace();
        return R.error().message("执行了全局异常处理");
    }


    /**
     * 特定异常处理
     * @param e Exception
     * @return R.error
     */
    // 除0异常
    @ExceptionHandler(ArithmeticException.class)
    // 为了能够返回数据
    @ResponseBody
    public R error(ArithmeticException e){
        e.printStackTrace();
        return R.error().message("执行了ArithmeticException异常处理");
    }

    /**
     * 自定义异常
     * 1. 创建一个自定义异常类，继承RuntimeException
     * 2. 在类中写异常的属性(状态码，异常信息)
     * 3. 其他的同其他两种
     */
    @ExceptionHandler(ErgwangException.class)
    @ResponseBody
    public R error(ErgwangException e){

        // 讲异常信息写入到文件中
        log.error(e.getMsg());

        e.printStackTrace();
        return R.error().code(e.getCode()).message(e.getMsg());
    }
}


